package com.gzsxy.sso.core.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gzsxy.sso.common.dto.request.UserRequest;
import com.gzsxy.sso.common.dto.response.UserRsp;
import com.gzsxy.sso.core.entity.Permission;
import com.gzsxy.sso.core.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gzsxy.sso.core.entity.vo.UserQueryVo;

import java.util.List;
import java.util.Map;

/**
 *
 * @author zxl
 * @since 2021-11-10
 */
public interface UserService extends IService<User> {


    /**
     * @description: 根据用户id查询用户
     * @param
     * @return
     */
    User getUserById(String id);

    /**
     * @description: 通过用户名查询用户
     * @param username 用户名
     * @return  user
     */
    User findByUsername(String username);

    /**
     * @description: 通过身份证号查询用户
     * @param idcard 用户名
     * @return  user
     */
    User findByIdCard(String idcard);

    /**
     * @description: 通过用户名查询当前用户权限
     * @param  username 用户名
     * @return Permission 权限
     */
    List<Permission> findPermissionByUsername(String username);

    /**
     * @description: 获取所有的用户
     */
    List<User> getAllUser();

    /**
     * @description: 添加用户
     * @param
     * @return
     */
    void addUser(UserRequest user);


    /**
     * @description: 编辑用户
     * @param
     * @return
     */
    void updateUser(UserRequest request);


    /**
     * @description: 分页查询
     * @param
     * @return
     */
    IPage<UserRsp> selectPage(IPage<?> pageParam, UserQueryVo userQueryVo);


    /**
     * @description: 删除用户
     * @param
     * @return
     */
    Boolean deleteById(String id);

    /**
     * @description: 查询当前用户是否为超级管理员
     * @param
     * @return
     */
    Boolean isSadmin(String userId);

    /**
     * @description: 禁用账号
     * @param
     * @return
     */
    void changeDisabled(String userId, Boolean type);



    /**
     * @description: 根据关键字查询用户名列表
     * @param
     * @return
     */
    List<Map<String, Object>> selectNameListByKey(String key);


    /**
     * @description: 更新最后登录时间
     * @param  id 用户id
     * @return
     */
    void updateLastloginTime(String id);

    /**
     * @description: 修改密码
     * @param password 密码
     * @return
     */
    void changePassword(String oldPassword,String password);

    /**
     * @description: 对外暴露接口，更新用户信息返回最新用户
     * @param
     * @return
     */
    UserRsp updateApiUser(UserRequest request);

    /**
     * @description: 编辑账号余额
     * @param
     * @return
     */
    void editAmountById(String id, Integer amount);

    /**
     * @description: 对外接口新增用户
     * @param
     * @return
     */
    void addUser1(UserRequest request);

    /**
     * @description: 查询当前系统的所有商家
     * @param
     * @return
     */
    List<String> selectAllUserId();
}
